package app

import (
	"fmt"

	"github.com/natefinch/lumberjack"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

// 日志初始化
func MyConfig() zapcore.EncoderConfig {
	return zapcore.EncoderConfig{
		// TimeKey:        "ts",     //时间标签
		LevelKey:       "level",  //等级
		NameKey:        "logger", //日志名称
		CallerKey:      "caller",
		FunctionKey:    zapcore.OmitKey,
		MessageKey:     "msg",
		StacktraceKey:  "stacktrace",
		LineEnding:     zapcore.DefaultLineEnding,
		EncodeLevel:    zapcore.LowercaseLevelEncoder,
		EncodeTime:     zapcore.EpochTimeEncoder,
		EncodeDuration: zapcore.SecondsDurationEncoder,
		EncodeCaller:   zapcore.ShortCallerEncoder,
	}
}

// 初始化日志
func Zap(path string) *zap.Logger {
	encoderCfg := MyConfig()
	encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder //更改时间格式
	encoder := zapcore.NewJSONEncoder(encoderCfg)

	// 配置日志切割
	// file, _ := os.OpenFile("./app.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0664)
	LumberJackLogger := &lumberjack.Logger{
		Filename:   fmt.Sprintf("./logs/%s.log", path), //日志路径，以该项目根目录开始
		MaxSize:    1,                                  //每个日志最大容量 （mb）
		MaxBackups: 5,                                  //日志最大存储数量（个）
		MaxAge:     1,                                  //日志存储天数
		Compress:   true,                               //是否压缩
	}
	fileWs := zapcore.AddSync(LumberJackLogger)
	level := zapcore.DebugLevel //记录debug以上的level
	// 日志有三部分组成
	// 日志生成的格式配置encoder
	// 写入日志的方式
	// 写入日志的等级
	core := zapcore.NewCore(encoder, fileWs, level)

	logger := zap.New(core)

	return logger
}
